home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Analysis.c
-
- Contains: Sample code for Language Analysis Manager.
-
- Version: Technology: System 8
- Release: Daruma Developer Release 1
-
- Copyright: 1998 by Apple Computer, Inc., all rights reserved
-
- Contact: daruma@apple.com
-
- */
-
-
- #include "TestApp.h"
- #include "FunctionProto.h"
-
- #include <Menus.h>
- #include <Devices.h>
- #include <TextUtils.h>
- #include <Resources.h>
- #include <Scrap.h>
-
- // ========================================================================================
- // Global variables
- // ========================================================================================
- static Boolean gQuitNow;
-
- // ========================================================================================
- // Prototypes for static functions
- // ========================================================================================
- static void DoInputDialogEvent ( EventRecord *theEvent );
- static void DoRegularEvent ( EventRecord *theEvent );
- static void HandleMenus ( long menuResult );
- static void AdjustMenus ( void );
- static void ChangeDefautItem( DialogRef dialog, SInt16 newDefaultItem );
- static void DoQuit( void );
-
- // ========================================================================================
- // MainEventLoop
- // ========================================================================================
- void MainEventLoop ( void )
- {
- EventRecord theEvent;
- Boolean gotEvent;
- Boolean eventProcessed;
- Boolean consoleClosed;
-
- gQuitNow = false;
-
- while ( true)
- {
- gotEvent = WaitNextEvent( everyEvent, &theEvent, 0L, nil);
-
- eventProcessed = ProcessConsoleWindowEvent( &theEvent, &consoleClosed);
-
- if ( !eventProcessed && gotEvent)
- {
- if ( ( theEvent.what == keyDown) && ( theEvent.modifiers & cmdKey) )
- {
- AdjustMenus();
- HandleMenus( MenuKey( theEvent.message & charCodeMask));
- eventProcessed = true;
- }
- }
-
- if ( !eventProcessed)
- {
- if ( IsDialogEvent( &theEvent))
- {
- if ( IsInputDialog( FrontWindow()))
- DoInputDialogEvent( &theEvent);
- }
- else
- {
- DoRegularEvent( &theEvent);
- }
- }
-
- if ( gQuitNow)
- {
- DoQuit();
- break;
- }
- }
- }
-
-
- // ========================================================================================
- // DoInputDialogEvent
- // ========================================================================================
- static void DoInputDialogEvent ( EventRecord *theEvent )
- {
- DialogRef dialog = gInputDialog->dialog;
- InputDialogPtr dialogInfoPtr = gInputDialog;
- short itemHit;
- Boolean eventProcessed = false;
- WindowRef whichWindow;
- OSStatus err;
-
- if ( theEvent->what == mouseDown &&
- FindWindow( theEvent->where, &whichWindow) == inContent &&
- whichWindow != FrontWindow())
- {
- SelectWindow( whichWindow);
- }
-
- eventProcessed = StdFilterProc( dialog, theEvent, &itemHit);
-
- if ( !eventProcessed)
- {
- eventProcessed = DialogSelect( theEvent, &dialog, &itemHit);
- }
-
- if ( eventProcessed && dialog != NULL)
- {
- switch ( itemHit)
- {
- case kConvertBtnDItemID:
- err = DoMorphemeAnalysis( dialogInfoPtr);
- dialogInfoPtr->converted = ( err == noErr);
- dialogInfoPtr->curCandNum = 1;
- SelectDialogItemText( dialog, kInputEditTextDItemID, 0, 255);
- if ( err == noErr)
- {
- ChangeDefautItem( dialog, k1stCandBtnDItemID);
- }
- break;
-
- case k1stCandBtnDItemID:
- if ( dialogInfoPtr->converted)
- {
- PrintBundle( &dialogInfoPtr->analysisBundle,
- dialogInfoPtr->curAnalysisClass, 1);
- dialogInfoPtr->curCandNum = 1;
- }
- ChangeDefautItem( dialog, kNextCandBtnDItemID);
- break;
-
- case kNextCandBtnDItemID:
- if ( dialogInfoPtr->converted)
- {
- dialogInfoPtr->curCandNum++;
-
- PrintBundle( &dialogInfoPtr->analysisBundle,
- dialogInfoPtr->curAnalysisClass,
- dialogInfoPtr->curCandNum);
- }
- break;
-
- case kAllCandBtnDItemID:
- if ( dialogInfoPtr->converted)
- {
- PrintBundle( &dialogInfoPtr->analysisBundle,
- dialogInfoPtr->curAnalysisClass, 0);
- }
- break;
-
- case kEnvironPopupDItemID:
- SetAnalysisEnvironment( dialogInfoPtr);
- break;
-
- case kInputEditTextDItemID:
- ChangeDefautItem( dialog, kConvertBtnDItemID);
- break;
-
- default: break;
- }
- }
- }
-
-
- // ========================================================================================
- // ChangeAnalysisMethod
- // ========================================================================================
- void ChangeAnalysisMethod ( short newMode )
- {
- InputDialogPtr dialogInfoPtr = gInputDialog;
- DialogRef dialog = dialogInfoPtr->dialog;
- Handle itemHandle;
-
- if ( newMode == gAnalysisMode) return;
-
- if ( newMode == kBatchAnalysisMode)
- {
- HideDialogItem( dialog, kInputStatTextDItemID);
- ShowDialogItem( dialog, k1stCandBtnDItemID);
- ShowDialogItem( dialog, kNextCandBtnDItemID);
- ShowDialogItem( dialog, kAllCandBtnDItemID);
- ShowDialogItem( dialog, kCandTitleDItemID);
- }
- else
- {
- HideDialogItem( dialog, k1stCandBtnDItemID);
- HideDialogItem( dialog, kNextCandBtnDItemID);
- HideDialogItem( dialog, kAllCandBtnDItemID);
- HideDialogItem( dialog, kCandTitleDItemID);
- itemHandle = GetDialogItemHandle( dialog, kInputStatTextDItemID);
- SetDialogItemText( itemHandle, "\p");
- ShowDialogItem( dialog, kInputStatTextDItemID);
- }
-
- ChangeDefautItem( dialogInfoPtr->dialog, kConvertBtnDItemID);
-
- gAnalysisMode = newMode;
- }
-
-
- // ========================================================================================
- // DoRegularEvent
- // ========================================================================================
- static void DoRegularEvent ( EventRecord *theEvent )
- {
- WindowRef whichWindow;
- short partCode;
-
- switch ( theEvent->what)
- {
- case mouseDown:
- partCode = FindWindow( theEvent->where, &whichWindow);
-
- switch ( partCode )
- {
- case inMenuBar:
- AdjustMenus();
- HandleMenus( MenuSelect( theEvent->where));
- break;
-
- case inSysWindow:
- SystemClick( theEvent, whichWindow);
- break;
-
- case inDrag:
- if ( whichWindow != FrontWindow())
- SelectWindow( whichWindow);
- DragWindow( whichWindow, theEvent->where, &(*GetGrayRgn())->rgnBBox);
- break;
-
- case inContent:
- if ( whichWindow != FrontWindow())
- SelectWindow( whichWindow);
- break;
-
- default:
- break;
- }
- break;
-
- case updateEvt:
- case activateEvt:
- case nullEvent:
- break;
-
- default:
- break;
- }
- }
-
-
- // ========================================================================================
- // HandleMenus
- // ========================================================================================
- static void HandleMenus ( long menuResult )
- {
- short menuID, menuItem;
- Str255 itemName;
- long sizeNum;
- short level;
- Handle itemHandle;
-
- if ( menuResult == 0) return;
-
- menuID = ( ( menuResult >> 16) & 0x0000FFFF);
- menuItem = ( menuResult & 0x0000FFFF);
-
- switch ( menuID)
- {
- case kAppleMenuID:
- switch ( menuItem)
- {
- case kAboutMenuItemID:
- break;
- default:
- GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
- OpenDeskAcc( itemName);
- break;
- }
- break;
-
- case kFileMenuID:
- switch ( menuItem)
- {
- case kQuitMenuItemID:
- gQuitNow = true;
- break;
- default:
- break;
- }
- break;
-
- case kEditMenuID:
- if ( IsInputDialog( FrontWindow()))
- {
- switch ( menuItem)
- {
- case kCutMenuItemID:
- ZeroScrap();
- DialogCut( gInputDialog->dialog);
- TEToScrap();
- break;
- case kCopyMenuItemID:
- ZeroScrap();
- DialogCopy( gInputDialog->dialog);
- TEToScrap();
- break;
- case kPasteMenuItemID:
- TEFromScrap();
- DialogPaste( gInputDialog->dialog);
- break;
- case kClearMenuItemID:
- DialogDelete( gInputDialog->dialog);
- break;
- case kSelectAllMenuItemID:
- SelectDialogItemText( gInputDialog->dialog, kInputEditTextDItemID, 0, 255);
- break;
- default:
- break;
- }
- }
- break;
-
- case kConsoleMenuID:
- switch ( menuItem)
- {
- case kClearConsoleMenuItemID:
- ClearConsoleWindowContent( gConsoleWindow);
- break;
- default:
- break;
- }
- break;
-
- case kOptionMenuID:
- switch ( menuItem)
- {
- case kBatchMenuItemID:
- ChangeAnalysisMethod( kBatchAnalysisMode);
- CheckItem( GetMenuHandle( menuID), kBatchMenuItemID, true);
- CheckItem( GetMenuHandle( menuID), kContinuousMenuItemID, false);
- break;
-
- case kContinuousMenuItemID:
- ChangeAnalysisMethod( kContinuousAnalysisMode);
- CheckItem( GetMenuHandle( menuID), kBatchMenuItemID, false);
- CheckItem( GetMenuHandle( menuID), kContinuousMenuItemID, true);
- break;
-
- default:
- break;
- }
- break;
-
- case kLevelMenuID:
- UncheckAllMenuItems( menuID);
- CheckItem( GetMenuHandle( menuID), menuItem, true);
- if ( menuItem == kLevelZeroMenuItemID)
- level = 0;
- else
- level = menuItem - kLevelOneMenuItemID + 1;
- SetAnalysisLevel( gInputDialog, level);
- break;
-
- case kSampleMenuID:
- GetIndString( itemName, kSampleStrResID, menuItem);
- itemHandle = GetDialogItemHandle( gInputDialog->dialog, kInputEditTextDItemID);
- SetDialogItemText( itemHandle, itemName);
- SelectDialogItemText( gInputDialog->dialog, kInputEditTextDItemID, 0, 255);
- ChangeDefautItem( gInputDialog->dialog, kConvertBtnDItemID);
- break;
-
- case kFontMenuID:
- GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
- SetConcoleWindowFont( gConsoleWindow, itemName, true);
- UncheckAllMenuItems( menuID);
- CheckItem( GetMenuHandle( menuID), menuItem, true);
- break;
-
- case kSizeMenuID:
- GetMenuItemText( GetMenuHandle( menuID), menuItem, itemName);
- StringToNum( itemName, &sizeNum);
- SetConcoleWindowFontSize( gConsoleWindow, (SInt16)sizeNum, true);
- UncheckAllMenuItems( menuID);
- CheckItem( GetMenuHandle( menuID), menuItem, true);
- break;
-
- default:
- break;
- }
-
- HiliteMenu( 0);
- }
-
-
- // ========================================================================================
- // AdjustMenus
- // ========================================================================================
- static void AdjustMenus ( void )
- {
- // Do nothing for now
- }
-
-
- // ========================================================================================
- // UncheckAllMenuItems
- // ========================================================================================
- void UncheckAllMenuItems ( short menuID )
- {
- short menuCount, i;
- MenuRef targetMenu;
-
- targetMenu = GetMenuHandle( menuID);
- menuCount = CountMItems( targetMenu);
-
- for ( i = 1; i <= menuCount; ++i)
- {
- CheckItem( targetMenu, i, false);
- }
- }
-
-
- // ========================================================================================
- // ChangeDefautItem
- // ========================================================================================
- static void ChangeDefautItem( DialogRef dialog, SInt16 newDefaultItem )
- {
- GrafPtr savePort;
- short itemType;
- Handle itemHandle;
- Rect itemRect;
- static SInt16 gCurDefaultItem = kConvertBtnDItemID;
- RgnHandle targetRgn, tempRgn;
-
- if ( gAnalysisMode != kBatchAnalysisMode)
- {
- return; // since all buttons except "Convert" are hidden
- }
-
- if ( newDefaultItem != gCurDefaultItem)
- {
- GetPort( &savePort);
- SetPort( dialog);
-
- SetDialogDefaultItem( dialog, newDefaultItem);
-
- targetRgn = NewRgn();
- tempRgn = NewRgn();
-
- GetDialogItem( dialog, gCurDefaultItem, &itemType, &itemHandle, &itemRect);
- RectRgn( tempRgn, &itemRect);
- InsetRect( &itemRect, -6, -6);
- RectRgn( targetRgn, &itemRect);
- DiffRgn( targetRgn, tempRgn, targetRgn);
- EraseRgn( targetRgn);
-
- GetDialogItem( dialog, newDefaultItem, &itemType, &itemHandle, &itemRect);
- RectRgn( tempRgn, &itemRect);
- InsetRect( &itemRect, -6, -6);
- RectRgn( targetRgn, &itemRect);
- DiffRgn( targetRgn, tempRgn, targetRgn);
- InvalRgn( targetRgn);
-
- DisposeRgn( targetRgn);
- DisposeRgn( tempRgn);
-
- gCurDefaultItem = newDefaultItem;
-
- SetPort( savePort);
- }
- }
-
-
- // ========================================================================================
- // DoQuit
- // ========================================================================================
- static void DoQuit( void )
- {
- DialogRef dialog = gInputDialog->dialog;
- InputDialogPtr dialogInfoPtr = gInputDialog;
-
- if ( dialogInfoPtr->analysisBundle.descriptorType != typeNull)
- AEDisposeDesc( &dialogInfoPtr->analysisBundle);
-
- if ( dialogInfoPtr->analysisPath.descriptorType != typeNull)
- AEDisposeDesc( &dialogInfoPtr->analysisPath);
-
- ReleaseAnalysisContext( dialogInfoPtr);
- CloseDialog( dialog);
- DisposePtr( (Ptr)dialogInfoPtr);
-
- DisposeConsoleWindow( gConsoleWindow);
-
- return;
- }
-
-
-